

package lc3vm;


public class Memoria {


    private static final int CANTLINEAS = 500;
    private static Linea[] lineas = new Linea[CANTLINEAS];
    private static String dirActual = "0000", dirAnterior;
    private static int dir;


    public Memoria() {
    }

    public static void inicializar() {
        for(int i = 0; i < CANTLINEAS; i++)
            lineas[i] = new Linea();
    }

    public static Linea getLinea(String direccion) {
        Linea l = null;
        for(int i = 0; i < CANTLINEAS; i++)
            if(lineas[i].getDireccion().equals(direccion))
                l = lineas[i];
        return l;
    }

    public static Linea getLinea(int index) {
        return lineas[index];
    }

    public static void setInstruccionLinea(int index, String instruccion) {
        lineas[index].setInstruccion(instruccion);
    }

    public static String[][] getLineas(){
        String s[][] = new String[CANTLINEAS][4];

        for(int i = 0; i < CANTLINEAS; i++) {

             s[i][0] = lineas[i].getDireccion();
             s[i][1] = lineas[i].getInstruccion();
             s[i][2] = Convertidor.binHex(lineas[i].getInstruccion());
             s[i][3] = lineas[i].getEtiqueta();

        }

        return(s);

    }

    public static String getDirActual() {
        return dirActual;
    }

    public static void setDirActual(String direccion) {
        dirActual = direccion;
    }

    public static int getDirActualDec() {
        return Convertidor.hexInt(dirActual);
    }

    public static void setDirActual(int direccion) {
        dirActual = Integer.toBinaryString(direccion);
    }

    public static void aumentarDir() {
        dirAnterior = getDirActual();
        dir = getDirActualDec();
        dir++;
        dirActual = Convertidor.decHex(dir);
    }
    
    public static void saltoDir(int salto){
        dirAnterior = dirActual;
        dir = Convertidor.hexInt(dirActual);
        dir = dir + salto;
        dirActual = Integer.toHexString(dir).toUpperCase();
    }

    public static int getCantLineas() {
        return CANTLINEAS;
    }

}
